package com.company

import java.io.File
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract

//1、扩展函数
fun String.addExt(num: Int = 1) = this + "!".repeat(num)

//超类上定义扩展函数
//fun Any.easyPrint() = println(this)

//2、泛型扩展函数
fun <T> T.easyPrint(): T {
    println(this)
    return this
}

//3、扩展属性
val String.numVowels
    get() = count { "aeiou".contains(it) }


//4、可空类扩展
fun String?.printWithDefault(default: String) = println(this ?: default)

//infix使用：接收者和函数之间的 点操作 以及 参数的一对括号 都可以 不要
infix fun String?.printWithDefault2(default: String) = println(this ?: default)

//定义扩展文件
//重命名扩展



fun main() {

    println("adc".addExt(2))

    "abc".easyPrint()
    15.easyPrint()

    "abc".easyPrint().addExt(2).easyPrint()

    "abc".let { 50 }

    "The people's Republic of China".numVowels.easyPrint()


    val info: String? = null
    info.printWithDefault("abc")

    //infix使用：接收者和函数之间的 点操作 以及 参数的一对括号 都可以 不要
    info printWithDefault2 "abc"



    //5、apply
    val file = File("xx").apply { setReadable(true) }
}
